package cn.hwm.proxy.dynamicproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class PersionInvocationHandler<T> implements InvocationHandler {

    // 被代理对象
    private T t;

    /**
     * 构造方法，传入被代理对象
     *
     * @param t
     */
    public PersionInvocationHandler(T t) {
        this.t = t;
    }

    /**
     * @param proxy  代表动态带你对象
     * @param method 代表正在执行的方法
     * @param args   代表调用目标方法时传入的实参
     * @return
     * @throws Throwable
     */
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        System.out.println("代理执行" + method.getName() + "方法");

        //代理过程中插入监测方法,计算该方法耗时
        MonitorUtil.start();
        Object result = method.invoke(t, args);
        MonitorUtil.finish(method.getName());
        return result;
    }
}
